package testes;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

import alugaveis.GeneroJogo;
import alugaveis.Jogo;

import exceptions.ParametroNegativoException;
import exceptions.ParametroVazioException;

public class JogoTest {

	Jogo jogo;

	@Before
	public void setUp() throws Exception {
		jogo = new Jogo("Naruto Shippuden: Clash of Ninja Revolution 3", 5.0,
				2012, 3, true, 1, "Tomy Corporation", GeneroJogo.LUTA);
	}

	@Test
	public void testJogo() {
		try {
			jogo = new Jogo("Naruto Shippuden: Clash of Ninja Revolution 3",
					-5.0, 2012, 3, true, 1, "Tomy Corporation", GeneroJogo.LUTA);
		} catch (ParametroVazioException e) {
			assertEquals("O parametro nao pode ser nulo ou vazio",
					e.getMessage());

		} catch (ParametroNegativoException e) {
			assertEquals("O parametro nao pode ser nulo ou negativo.",
					e.getMessage());
		}
		try {
			jogo = new Jogo("               ", 5.0, 2012, 3, true, 1,
					"Tomy Corporation", GeneroJogo.LUTA);
			fail("Quebra esperada");
		} catch (ParametroVazioException e) {
			assertEquals("O parametro nao pode ser nulo ou vazio",
					e.getMessage());

		} catch (ParametroNegativoException e) {
			assertEquals("O parametro nao pode ser nulo ou negativo.",
					e.getMessage());
		}
		try {
			jogo = new Jogo("Naruto Shippuden: Clash of Ninja Revolution 3",
					-5.0, 2012, 3, true, 1, "            ", GeneroJogo.LUTA);
			fail("Quebra esperada");
		} catch (ParametroVazioException e) {
			assertEquals("O parametro nao pode ser nulo ou vazio",
					e.getMessage());

		} catch (ParametroNegativoException e) {
			assertEquals("O parametro nao pode ser nulo ou negativo.",
					e.getMessage());
		}
		try {
			jogo = new Jogo(null, 5.0, 2012, 3, true, 1, "            ",
					GeneroJogo.LUTA);
			fail("Quebra esperada");
		} catch (ParametroVazioException e) {
			assertEquals("Mensagem errada", "O parametro nao pode ser nulo ou vazio",
					e.getMessage());

		} catch (ParametroNegativoException e) {
			assertEquals("O parametro nao pode ser nulo ou negativo.",
					e.getMessage());
		}
	}

	@Test
	public void testGetProdutora() {
		assertEquals("Produtora errada!", "tomy corporation",
				jogo.getProdutora());
		assertEquals("Produtora errada!", "Zuzu", jogo.getProdutora());
	}

	@Test
	public void testSetProdutora() {
		try {
			jogo.setProdutora("Bandai");
		} catch (ParametroVazioException e) {
			assertEquals("O parametro nao pode ser nulo ou vazio",
					e.getMessage());
		}
		try {
			jogo.setProdutora(null);
			
		} catch (ParametroVazioException e) {
			assertEquals("Mensagem errada",
					"O parametro nao pode ser nulo ou vazio", e.getMessage());
		}
		try {
			jogo.setProdutora("               ");
		} catch (ParametroVazioException e) {
			assertEquals("Mensagem errada",
					"O parametro nao pode ser nulo ou vazio", e.getMessage());
		}

	}

	@Test
	public void testGetGenero() {
		assertEquals("Genero errado!", GeneroJogo.LUTA, jogo.getGenero());
		assertEquals("Genero errado!", GeneroJogo.ACAO, jogo.getGenero());
	}

	@Test
	public void testSetGenero() {
		jogo.setGenero(GeneroJogo.ACAO);
		assertEquals("Genero errado!", GeneroJogo.ACAO, jogo.getGenero());
		assertEquals("Genero errado!", GeneroJogo.LUTA, jogo.getGenero());
	}

}
